#include <REGX52.H>
#include "Timer0.h"
#include "Key.h"
#include "intrins.h"


/*void Timer0_Init()//初始化
{
	//TMOD=0x01;   //0000 0001
	TMOD=TMOD&0xF0;//把TMOD的第四位清零，高四位保持不变
	TMOD=TMOD|0x01;//把TMOD的第四位置1 ，高四位保持不变
	
	TF0=0;//清零，防止刚开始就中断
	TR0=1;//开始工作
	
	
	//0-65535,每隔1us计数加一
	//64535到计数器溢出（65535）差值1000us
	//就是1ms
	
	
	TH0=64535/256;//两个八位寄存器  高位的
	TL0=64535%256+1;//低位的寄存器
	ET0=1;
	EA=1;
	PT0=0;	
}*/

/*void Timer0_Init(void)		//1毫秒@12.000MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;
	EA=1;
	PT0=0;	
}
*/

unsigned char KeyNum,LEDMode;

void main()
{
	P2=0xFE;
	Timer0_Init();//上电初始化定时器
	while(1)
	{
//		//测试独立按键
//		KeyNum=Key();
//		if(KeyNum)
//		{
//			if(KeyNum==1) P2_1=~P2_1;
//			if(KeyNum==2) P2_2=~P2_2;
//			if(KeyNum==3) P2_3=~P2_3;
//			if(KeyNum==4) P2_4=~P2_4;
//		}
		
		KeyNum=Key();
		if(KeyNum)
		{
			if(KeyNum==1)//目前只设置按键1
			{
				LEDMode++;
				if(LEDMode>=2) LEDMode=0;//LEDMode只有0,1
				//满足预期，左移右移两种模式
			}
		}
		
		
	}
}


void Timer0_Routine() interrupt 1  //定时器0的中断函数
{
	static unsigned int T0Count;//static静态局部变量，只有本函数能引用
	//退出函数不丢失T0Count变量
	
	//再初始化
	/*TH0=64535/256;//两个八位寄存器  高位的
	TL0=64535%256;//低位的寄存器*/
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	
	T0Count++;
	if(T0Count>=500)
	{
		//清零重记次
		T0Count=0;
		//P2_0=~P2_0;//一秒亮一秒灭
		
		if(LEDMode==0) 
			P2 = _crol_(P2,1);//循环左移1位
		// _crol_ 最高位是1时候，移到最低位是1
		
		if(LEDMode==1) 
			P2 = _cror_(P2,1);//循环右移1位
		// _cror_ 最低位是1时候，移到最高位是1
	
	}
	
}
